package com.zjsru.plan2024.oneday;

/**
 * 2270. 分割数组的方案数
 *
 * @Author: cookLee
 * @Date: 2024-11-11
 */
public class WaysToSplitArray {

    /**
     * 主
     * \
     * 输入：nums = [10,4,-8,7]
     * 输出：2
     * 解释：
     * 总共有 3 种不同的方案可以将 nums 分割成两个非空的部分：
     * - 在下标 0 处分割 nums 。那么第一部分为 [10] ，和为 10 。第二部分为 [4,-8,7] ，和为 3 。因为 10 >= 3 ，所以 i = 0 是一个合法的分割。
     * - 在下标 1 处分割 nums 。那么第一部分为 [10,4] ，和为 14 。第二部分为 [-8,7] ，和为 -1 。因为 14 >= -1 ，所以 i = 1 是一个合法的分割。
     * - 在下标 2 处分割 nums 。那么第一部分为 [10,4,-8] ，和为 6 。第二部分为 [7] ，和为 7 。因为 6 < 7 ，所以 i = 2 不是一个合法的分割。
     * 所以 nums 中总共合法分割方案受为 2 。
     * \
     * 输入：nums = [2,3,1,0]
     * 输出：2
     * 解释：
     * 总共有 2 种 nums 的合法分割：
     * - 在下标 1 处分割 nums 。那么第一部分为 [2,3] ，和为 5 。第二部分为 [1,0] ，和为 1 。因为 5 >= 1 ，所以 i = 1 是一个合法的分割。
     * - 在下标 2 处分割 nums 。那么第一部分为 [2,3,1] ，和为 6 。第二部分为 [0] ，和为 0 。因为 6 >= 0 ，所以 i = 2 是一个合法的分割。
     * \
     *
     * @param args args
     */
    public static void main(String[] args) {
        WaysToSplitArray waysToSplitArray = new WaysToSplitArray();
        int[] nums = new int[]{10, 4, -8, 7};
        System.out.println(waysToSplitArray.waysToSplitArray((nums)));

    }

    /**
     * 分割数组方法
     *
     * @param nums nums
     * @return int
     */
    public int waysToSplitArray(int[] nums) {
        long sum = 0;
        for (int num : nums) {
            sum += num;
        }
        int count = 0;
        long left = 0;
        for (int i = 0; i < nums.length - 1; i++) {
            sum -= nums[i];
            left += nums[i];
            if (left >= sum) {
                count++;
            }
        }
        return count;
    }

}
